package servlet;

import clases.Jugador;
import clases.Usuario;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.xml.ws.WebServiceRef;
import service.ArrayOfString;
import service.ArrayOftCountryInfo;
import service.Info;
import service.TCountryInfo;

public class jugadores extends HttpServlet {

    @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/footballpool.dataaccess.eu/data/Info.wso.wsdl")
    private Info service;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        int num = 1; //Dorsal del jugador que queremos cambiar
        String posicion=""; //Nombre de la posicion del jugador
        
        //Cogemos al usuario de la sesion
        HttpSession session=request.getSession();
        Usuario usuario=(Usuario) session.getAttribute("usuario");
                
        //Cogemos el parámetro 'num' que nos indicará qué dorsal lleva el jugador
        try {
            //Cogemos el String del request
            String stringNum = request.getParameter("num");
            //Intentamos pasarlo a entero
            num = Integer.parseInt(stringNum);
            //Comprobamos que es un número válido
            if (num < 1 || num > 11) {
                throw new Exception("Numero de dorsal no valido");
            }
        } catch (Exception ex) {
            //Si algo falló, ponemos un mensaje y vamos a panel.jsp
            request.setAttribute("mensaje", ex.toString());
            request.getRequestDispatcher("/panel.jsp").forward(request, response);
        }

        //Cogemos el pais del que queremos los jugadores
        String pais = request.getParameter("pais");
        
        //Si no hubiese ningún país puesto, se asigna "Spain"

        //Si no está el parámetro cambiar, es que queremos ver la lista de posibilidades
        if(request.getParameter("cambiar")==null){
        //Inicializamos el array donde recibiremos los jugadores
        ArrayOfString arrayString = null;

        switch(num){
            case 1:
                posicion="Portero";
                arrayString = allGoalKeepers("Spain");  //Queremos los porteros
                break;
            case 2:
                posicion="Defensa Ext. Izquierdo";
                arrayString = allDefenders("Spain");    //Queremos los defensas
                break;
            case 3:
                posicion="Defensa Izquierdo";
                arrayString = allDefenders("Spain");    //Queremos los defensas
                break;
            case 4:
                posicion="Defensa Derecho";
                arrayString = allDefenders("Spain");    //Queremos los defensas
                break;
            case 5:
                posicion="Defensa Ext. Derecho";
                arrayString = allDefenders("Spain");    //Queremos los defensas
                break;
            case 6:
                posicion="Medio Ext. Izquierdo";
                arrayString = allMidFields("Spain");    //Queremos los medios
                break;
            case 7:
                posicion="Medio Izquierdo";
                arrayString = allMidFields("Spain");    //Queremos los medios
                break;
            case 8:
                posicion="Medio Derecho";
                arrayString = allMidFields("Spain");    //Queremos los medios
                break;
            case 9:
                posicion="Medio Ext. Derecho";
                arrayString = allMidFields("Spain");    //Queremos los medios
                break;
            case 10:
                posicion="Delantero Izquierdo";
                arrayString = allForwards("Spain");     //Queremos los delanteros
                break;
            case 11:
                posicion="Delantero Derecho";
                arrayString = allForwards("Spain");     //Queremos los delanteros
                break;
        }

        //Pasamos el array a lista de String
        List<String> listNombre = arrayString.getString();

        //Pasaremos a la página lista.jsp una lista de Jugadores
        List<Jugador> listJugador=new ArrayList();
        //Recorremos la lista creando los jugadores (nombre, cod. del pais)
        for (String nombre : listNombre) {
            Jugador jugador = new Jugador(nombre, "ES");
            listJugador.add(jugador);
        }

        //Pegamos el nombre de la posicion al request
        request.setAttribute("posicion", posicion);
        //Pegamos la lista de jugadores al request
        request.setAttribute("listJugador", listJugador);

        //Pedimos el listado de paises al Web Service
        ArrayOftCountryInfo arrayCountry = countryNames(true);
        //Lo pasamos a List
        List<TCountryInfo> listCountryInfo = arrayCountry.getTCountryInfo();

        //Pegamos la lista de paises al request
        request.setAttribute("listCountryInfo", listCountryInfo);
        
        //Redirigimos a la lista para visualizarlos y poder elegir
        request.getRequestDispatcher("/lista.jsp").forward(request, response);
        
        }else{
            //Si el parámetro 'cambiar' existe, es que ya hemos elegido
            String nombre=request.getParameter("nombre");
            usuario.setJugadorNum(num, nombre);
            usuario.actualizar();

            //Redirigimos al panel despues del cambio
            request.getRequestDispatcher("/panel.jsp").forward(request, response);
            
        }
/*



        List<String> listNombre = new ArrayList();

        //Pedimos el listado de paises al Web Service
        ArrayOftCountryInfo arrayCountry = countryNames(true);
        //Lo pasamos a List
        List<TCountryInfo> listCountryInfo = arrayCountry.getTCountryInfo();

        for (TCountryInfo countryInfo : listCountryInfo) {

            //Inicializamos el array donde recibiremos los jugadores
            ArrayOfString arrayString = null;

            if (dorsal == 1) {
                arrayString = allGoalKeepers(countryInfo.getSName().trim());  //Queremos los porteros
            } else if (dorsal >= 2 && dorsal < 6) {
                arrayString = allDefenders(countryInfo.getSName().trim());    //Queremos los defensas
            } else if (dorsal >= 6 && dorsal < 10) {
                arrayString = allMidFields(countryInfo.getSName().trim());    //Queremos los medios
            } else if (dorsal == 10 || dorsal == 11) {
                arrayString = allForwards(countryInfo.getSName().trim());     //Queremos los delanteros
            }

            //Pasamos el array a lista
            listNombre.addAll(arrayString.getString());
//8859-9
        }
        //Lo pegamos en el request para mandarlo a lista.jsp
        request.setAttribute("listNombre", listNombre);

        //Creamos el objeto pais a partir del parámetro
        Pais paisSeleccionado = new Pais(request.getParameter("pais"));
        request.setAttribute("paisSeleccionado", paisSeleccionado);

*/

    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    /**
     * Devuelve todos los nombres de paises
     * @param sCountryName
     * @return 
     */
    private ArrayOftCountryInfo countryNames(boolean bWithCompetitors) {
        service.InfoSoapType port = service.getInfoSoap();
        return port.countryNames(bWithCompetitors);
    }

    /**
     * Devuelve todos los porteros de la seleccion del pais indicado
     * @param sCountryName
     * @return 
     */
    private ArrayOfString allGoalKeepers(java.lang.String sCountryName) {
        service.InfoSoapType port = service.getInfoSoap();
        return port.allGoalKeepers(sCountryName);
    }

    /**
     * Devuelve todos los defensas de la seleccion del pais indicado
     * @param sCountryName
     * @return 
     */
    private ArrayOfString allDefenders(java.lang.String sCountryName) {
        service.InfoSoapType port = service.getInfoSoap();
        return port.allDefenders(sCountryName);
    }

    /**
     * Devuelve todos los medios de la seleccion del pais indicado
     * @param sCountryName
     * @return 
     */
    private ArrayOfString allMidFields(java.lang.String sCountryName) {
        service.InfoSoapType port = service.getInfoSoap();
        return port.allMidFields(sCountryName);
    }

    /**
     * Devuelve todos los delanteros de la seleccion del pais indicado
     * @param sCountryName
     * @return 
     */
    private ArrayOfString allForwards(java.lang.String sCountryName) {
        service.InfoSoapType port = service.getInfoSoap();
        return port.allForwards(sCountryName);
    }
}
